package linkedlist;

/**
 * @Author: xpengfei
 * @Date: 2019/9/19 14:47
 * @Description：链表的实现
 */
public class LinkedList {

    Node head = null;   //头结点

    /**
     * 链表尾部实现添加节点
     *@param要添加的数据
     *@return
     */
    public void addNode(Object data){
        Node newNode = new Node(data); //实例化一个节点
        if(head == null){
            head = newNode;
            return;
        }
        //找到链表中最后一个节点，将新节点连接到最后一个节点后，实现尾部插入
        Node node = head;
        while (node.next != null){
            node = node.next;
        }
        node.next = newNode;
    }
    /**
     * 链表头部实现添加节点
     *@param要添加的数据
     *@return
     */
    public void headAddNode(Object data){
        Node newNode = new Node(data); //实例化一个节点
        if(head == null){
            head = newNode;
            return;
        }
        //实现链表头部插入
//        Node node = new Node();
//        node = head;
//        newNode.next = node;
//        head = newNode;
        newNode.next = head;
        head = newNode;
    }

    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();
        for (int i = 0; i < 10; i++) {
            linkedList.headAddNode(i*2);
        }
        int k = 0;
        while (linkedList.head != null){
            ++k;
            System.out.println("链表中数据"+k+":"+linkedList.head.data);
            linkedList.head = linkedList.head.next;
        }
    }









    /**
     * 内部类，用作链表中的节点，data代表节点值，next代表指向下一节点的引用
     */
    class Node{
        Node next = null;   //节点的引用，指向下一个节点
        Object data;        //节点的对象，即为节点值
        public  Node(Object data){
            this.data = data;
        }
        public  Node(){
        }
    }
}
